<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script>
  
  // 1. 请写出两种将Javascript应用到网页的方式
  // ① 内嵌式，在head标签内部书写<script>标签, 在<script>标签内部书写js代码。
  // ② 外联式，在外部创建.js文件，在通过<script src="路径">引入外部的js代码。

  
  // 2. 如何定义一个变量？变量的命名规则有哪些？
  // 通过var关键字定义变量，例如定义变量a，则代码书写为var a;
  // 变量的命名规则：
  // ① 变量由字母，下划线_，$符号和数字组成，但是不能以数字开头；
  // ② 不能用关键字命名；
  // ③ 不能用js的保留字命名。
  
  
  // 3. == 和 === 的区别
  // == 是比较左右两个数的数值相等，只要数值相等，即返回真值；
  // === 是比较左右两个数数值和数据类型相等，需要数值且数据类型相等，才返回真值。
  
  
  // 4. JS的简单数据类型有哪些并简单描述
  // JS 的数据类型有：
  // ① 数字类型Number 包括正数和浮点数
  // ② 字符串类型String 字符串类型是用一个""或''包裹起来的字符
  // ③ 布尔类型Boolean 布尔类型有两个值，true或false
  // ④ undefined,表示未定义数据
  // ⑤ null，表示一个空对象指针
  
  
  // 5. JS的算数运算符有哪些
  // JS的算术运算符有：+、-、*、/、%、()
  
  
  // 6. JS的比较运算符有哪些
  // JS的比较运算符有：>、<、>=、<=、==、===、!=、!== 
  // 7. JS的逻辑运算符有哪些 JS的逻辑运算符有:&&、||、! 
  // 8. var i=100; i++; j=i++;y=++j;请问j和y分别是多少 
  // j的值是:102，y的值是:102
  
  
  // 9. 计算下列算式，并将结果输出。
  // 324 * (23 + 214) / (568 - 129) - 11 * (235-24)
  var result_9;
  result = 324 * (23 + 214) / (568 - 129) - 11 * (235-24)
  console.log("第九题的结果为：", result);
  
  
  // 10. 住房公积金缴纳金额与工资两者的关系是：
  // 住房公积金 = 税前工资 * 0.1 * 2;
  // 编写程序，让用户输入税前工资，弹出对应的公积金数额。
  var salary = parseFloat(prompt("请输入您的税前工资",8000));
  var fun;
  fun = salary * 0.1 * 2;
  console.log("第十题的结果为：", fun);
  
  
  // 11. 用JS计算下列算式，并将结果在弹出：
  // Math.pow((23+Math.pow(5,7))/45,2)
  var result_11;
  result_11 = ((23 + 5 * 5 * 5 * 5 * 5 * 5 * 5) / 45) * ((23 + 5 * 5 * 5 * 5 * 5 * 5 * 5) / 45);
  console.log("第十一题的结果为: ", result_11);
  
  
  // 12. 编写程序，提示用户输入圆锥的底面半径和高，然后弹出它的体积，计算圆锥体积的公式是：
  // 体积V = 1 / 3π半径2 * 高
  
  // 用户输入圆锥的半径、高
  var R = parseFloat(prompt("请输入圆锥地面半径R",5));
  var H = parseFloat(prompt("请输入圆锥的高H",5));
  // 计算圆锥体积
  var V = (R * R * H)*3.1415926 / 3
  console.log("圆锥的半径R=" + R + ", 高=" + H + ", 体积V=" + V)
  
  
  // 13.如果今天是星期二，那么1000天后是星期几？用户输入一个天数，计算这个天数后是星期几。
  
  // 今天为周二，七天为一个周期，能被七整除，则为周二，以此类推。
  var inputDay = parseInt(prompt("请输入一个天数"));
  switch(inputDay % 7) {
    case 0:
      alert("今天是星期二");
      break;
    case 1:
      alert("今天是星期三");
      break;
    case 2:
      alert("今天是星期四");
      break;
    case 3:
      alert("今天是星期五");
      break;
    case 4:
      alert("今天是星期六");
      break;
    case 5:
      alert("今天是星期日");
      break;
    case 6:
      alert("今天是星期一");
      break;
  }
  
  // 14. 用户输入一个三位数，弹出各个数位的和。
  // 比如：
  // 用户输入155，就弹出11
  // 用户输入316，就弹出10
  // 用户输入989，就弹出26
  // 用户输入678，就弹出21
  
  // 用户输入
  var num_14 = parseInt(prompt("请输入一个三位数的正数",111));
  // 取个位数
  var units_digit = num_14 % 10;
  // 取十位数
  var tens_digit = parseInt(num_14 / 10) % 10;
  // 取白位数
  var hundreds_digit = parseInt(num_14 / 100);
  // 取千位数
  var sum = units_digit + tens_digit + hundreds_digit;
  console.log("输入的三位数为：" + num_14 + "各个数位和为：" + sum);
  
  // 15. 用户输入一个数字，然后判断这个数字能否被5、6整除的情况，根据情况弹出下面4种警告框：
  
  // 用户输入
  var num_15 = parseInt(prompt("请输入一个正数", 300));
  // 能被最小公约数为30的整除，则能同时被5和6整除
  if (num_15 % 30 == 0) {
    alert("这个数字同时能被5和6整除");
  } else if (num_15 % 5 == 0) {
    alert("这个数字能被5整除，但是不能被6整除");
  } else if (num_15 % 6 == 0) {
    alert("这个数字能被6整除，但是不能被5整除");
  } else {
    alert("这个数字既不能被6整除，也不能被5整除");
  }
  
  // 16.用户输入一个数字，然后再输入一个数字。然后弹出警告框：
  // 比如用户输入3、147，都是奇数
  // 比如用户输入6、171，不一样
  
  // 输入两个数
  var one = parseInt(prompt("请输入一个正数"));
  var two = parseInt(prompt("请再输入一个正数"));
  // 判断是两个数模2的结果是否相等
  // 相等，则奇偶性相同，不等，则奇偶性不同
  if (one % 2 == two % 2) {
    alert("你好，这两个数字的奇偶性相同");
  } else {
    alert("你好，这两个数的奇偶性不同");
  }
  
  
  // 17. 用户输入一个年份，判断这个年是否是闰年。
  // 判断闰年条件：
  // ① 非整百年数除以4，无余为闰，有余不闰；
  // ② 整百年数除以400，无余为闰，有余不闰。
  // 比如：
  // 2000年，整百数年，就要用②公式，除以400，无余数，所以是闰年。
  // 1900年，整百年数，就要用②公式，除以400，有余数，所以不是闰年。
  
  // 用户输入
  var year = parseInt(prompt("请输入一个年份"));
  // 判断是否为整百年
  if (year % 100 == 0) {
    // 为整百年
    if (year % 400 == 0) {
      // 是否能被400整除
      alert("这一年是闰年！");
    } else {
      alert("这一年不是闰年！");
    }
  } else {
    if (year % 4 == 0 ) {
      // 是否能被4整除
      alert("这一年是闰年！");
    } else {
      alert("这一年不是闰年！");
    }
  }
  
  // 18
  // 1. m = 1,n = 2
  // 2. m + n = 3 < 25 ,执行循环体
  // 3. n = 5, 控制台输出 m 的值 1
  // 4. m = 2 
  // 5. m + n = 7 < 25 ,执行循环体
  // 6. n = 8, 控制台输出 m 的值 2
  // 7. m = 3
  // 8. m + n = 11 < 25,执行循环体
  // 9. n = 14, 控制台输出 m 的值 3 
  // 10. m = 4
  // 11. m + n = 18 < 25,执行循环体
  // 12. n = 17 ,控制台输出 m 的值 4
  // 13. m = 5
  // 14. m + n = 22 < 25,执行循环体
  // 15. n= 20 ,控制台输出 m 的值 5
  // 16. m = 6
  // 17. m + n = 26 > 25,退出循环
  
  // 19
  // 1. i = 30
  // 2. i > 5, 执行循环体
  // 3. 控制台输出 i 的值 29
  // 4. i = 29 -7 ,i等于22
  // 5. i > 5, 执行循环体
  // 6. 控制台输出 i 的值 21
  // 7. i = 21 -7 ,i等于14
  // 8. i > 5, 执行循环体
  // 9. 控制台输出 i 的值 13
  // 10. i = 13 -7 ,i等于6
  // 11. i > 5, 执行循环体
  // 12. 控制台输出 i 的值 5
  // 13. i = 5 -7 ,i等于-2
  // 14. i < 5, 退出循环
  
  
  // 20. 用户输入一个数字n，计算1+2+3+4+……n的和。
  // 用户输入
  var n_20 = parseInt(prompt("请输入一个正整数n",5));
  var s_20 = 0;  
  for (var i = 1; i <= n_20; i++) {
    // 累计求和，大于用户输入的数，则退出循环
    s_20+=i;
  }
  console.log("输入的数字n为"+ n_20 + ",1+2+3+……n的和为" + s_20);
  
  
  // 21. 用户输入一个整数n，计算n的阶乘。即n*(n-1)*(n-2)*……*3*2*1.
  // 用户输入
  var n_21 = parseInt(prompt("请输入一个正整数n", 5));
  s_21 = 1;
  for (var i = n_21; i>=1; i--) {
    // 阶乘，大于用户输入的数，则退出循环
    s_21*=i;
  }
  console.log("输入的数字n为" + n_21 + ",该数字的阶乘为" + s_21);
  
  
  // 22. 用户输入一个数字n
  // (3 / 2) + (4 / 3) + (5 / 4)+……+(n + 1)/n
  // 用户输入
  var n_22 = parseInt(prompt("请输入一个正整数n", 5));
  var s_22 = 0;
  for(var j = n_22,i = j + 1; j >= 2; i--,j--) {
    // 除数用j表示，被除数比除数大一，用i=j+1表示
    // 累计求和
    s_22 += (i/j);
  }
  console.log("输入的数字n为" + n_22 + ",该数字的运算结果为" + s_22);
  
  
  // 23. 用户输入一个数字，在控制台中列出它的所有约数。
  // 用户输入
  var n_23 = parseInt(prompt("请输入一个正整数n",100));
  for (var i=1; i <= n_23; i++) {
    if (n_23 % i == 0) {
      // 能整除，则说明是它的约数
      console.log(i + "是" + n_23 + "的约数");
    }
  }
  
  // 24.水仙花数是一种特殊的四位数，它的特点就是，每个数位的四次方和，等于它本身。
  // 请编程找出来。
  for(var i = 1000; i <= 9999; i++) {
    // 取个位数
    var units_digit = i % 10;
    // 取十位数
    var tens_digit = parseInt(i / 10) % 10;
    // 取百位数
    var hundreds_digit = parseInt(i / 100) % 10;
    // 取千位数
    var thousands_digit = parseInt(i / 1000);
    // 由于4次方比较长，所以使用了Math.pow()
    if (Math.pow(units_digit, 4) + Math.pow(tens_digit, 4) + Math.pow(hundreds_digit, 4) + Math.pow(thousands_digit, 4) == i) {
      console.log(i + "是水仙花数");
    }
  }
  
  // 25.如果一个数恰好等于它的约数之和，则称该数为“完美数”。
  // 例如：
  // 第1个完全数是6，它有约数1、2、3、6，除去它本身6外，其余3个数相加，1 + 2 + 3=6。第2个完全数是28，它有约数1、2、4、7、14、28，除去它本身28外，其余5个数相加，1 + 2 + 4 + 7 + 14=28。
  // 试寻找1~10000之间的所有完美数。
  var s_25 = 0;
  for(var i = 1; i <= 10000; i++) {
    for(var j = i - 1; j >= 1; j--) {
      // i % j 求一个数字所有约数，在累加在一起，j = i -1除去本身
      if(i % j == 0) {  
        s_25 += j;
      }
    }
    if(s_25 == i) {
      // 判断约数相加是否等于本身
      console.log(i + "是完美数");
      s_25 = 0;
    } else {
      s_25 = 0;
    }
  }
  
  
  // 26.用户输入一个数字，判断这个数字是否是质数。
  // 质数就是指它的约数只有1和它本身。看约数个数是否是2.

  var num_26 = parseInt(prompt("请输入一个数字"));
  // 设置一个标志
  var flag_26 = 0;
  // 1既不是质数也不是合数
  for(var i = 2; i <= num_26; i++) {
    if(num_26 % i == 0){
      // 求约数的个数
      flag_26++;
    }
  }
  // 如果约数等于2，则该数字为质数
  if(flag_26 == 2) {
    alert("这个数字是质数");
  }
  
  // 27. 列出1~10000的所有质数。
  // 同26题类似，增加了一个循环来寻找1~10000的质数
  var flag_27 = 0;
  for(var i = 1; i <= 10000; i++) {
    for (j = i; j >= 1; j--) {
      if (i % j == 0) {
        flag_27++;
      }
    }
    if (flag_27 == 2) {
      console.log(i + "是质数");
      flag_27 = 0;
    } else {
      flag_27 = 0;
    }
  }
  
  // 28.苹果3元一个，鸭梨2元一个，桃子1元一个。现在想用200元正好买100个水果，在控制台中列出所有可能性。
  // 用三个循环来表示，苹果、鸭梨、桃子分别取的数量
  for(var i = 0; i <= 100; i++) {
    for (var j = 0; j <= 100 - i; j++) {
      for(var z = 0; z <= 100 - i -j; z++) {
        total = 3*i + 2*j + z;
        sum = i + j +z;
        // 判断三种水果相加起来等于100并且价钱等于200
        if(total == 200 && sum == 100) {
          console.log("苹果:"+i+"个，鸭梨："+j+",桃子："+z);
        }
      }
    }
  }
  
  
  // 29.有这样一个代码
  //   switch (name) {
  //     case "jt":
  //       alert('金团网);
  //       break;
  //    case "ejt":
  //       alert('金团相相贷');
  //       break;
  //    case "ejin":
  //       alert("网上综合金融体验馆");
  //       break;
  //    default:
  //       alert("金团网络典当");
  //   }
  // 请用if来实现上面的效果   
  var name_29 = prompt("请输入name");
  if (name == 'jt') {
    alert('金团网');
  } else if (name == 'ejt') {
    alert("金团相相贷");
  } else if (name == 'ejin') {
    alert('网上综合金融体验馆');
  } else {
    alert('金团网络典当');
  }
  
  
  // 30.JS有几种循环，分别是什么
  // 三种循环
  // 1.for 循环
  // 2.do while 循环
  // 3.while 循环
  
  
  // 31.break和continue的区别是什么
  // break 是跳出当前循环
  // continue 是跳出该次循环，进入下一次循环
  
  
  // 32.请用循环计算出 1+2+3+4+5+...+100的值
  var s_32 = 0;
  for(var i = 1; i <=100 ; i++) {
    // 从1开始累加，知道i大于100，退出循环
    s_32 += i;
  }
  console.log("1+2+3+4+5+...+100的值是：" + s_32);
  
  // 33. 开发一款软件，根据公式（身高-108）*2=体重，可以有10斤左右的浮动。判断测试者体重为标准体重还是超重还是偏瘦
  var weight = parseInt(prompt("请输入你的体重"));
  var height = parseInt(prompt("请输入你的身高"));
  var standard = (height - 108) * 2;
  // 根据公式算出标准值，由于有10斤浮动
  // 当体重大于标准 + 10 时为超重，小于标准 - 10为偏瘦，其他情况为标准体重
  if (standard - 10 > weight) {
    alert("您偏瘦，多吃一点!");
  } else if (standard + 10 < weight) {
    alert("您的体重偏重，记得多运动！")
  } else {
    alert("您的体重是标准的");
  }
  
  // 34.var grade = prompt("请输入分数");
  // switch (parseInt(grade / 10)) {
  //   case 10:
  //   case 9:
  //     alert("你的成绩等级为优秀");
  //     break;
  //   case 8:
  //   case 7:
  //   case 6:
  //     alert("你的成绩等级为良好");
  //     break;
  //   default:
  //     alert("你的成绩等级为不及格，继续加油哦！");
  // }
  // 将上述代码使用switch写法的另一种方式实现，以及使用if判断实现一次
  // switch
  var grade = prompt("请输入分数");
  var level = parseInt(grade / 10)
  switch (level) {
    case 10:
      alert("你的成绩等级为优秀");
      break;
    case 9:
      alert("你的成绩等级为优秀");
      break;
    case 8:
      alert("你的成绩等级为良好");
      break;
    case 7:
      alert("你的成绩等级为良好");
      break;
    case 6:
      alert("你的成绩等级为良好");
      break;
    default:
      alert("你的成绩等级为不及格，继续加油哦！");
  }
  // if实现，根据判断条件，大于9则为优秀，大于六且小于九则为良好
  if (level >= 9) {
    alert("你的成绩等级为优秀");
  } else if (level >= 6) {
    alert("你的成绩等级为良好");
  } else {
    alert("你的成绩等级为不及格，继续加油哦！");
  }
  
  // 35. 输入月份，显示当月天数（输入2月时需要再次输入年份判断是不是闰年后在显示当月天数）
  // 根据题目，只有2月份才需要判断当年是否为闰年
  // 因此，只有用户输入2月份时，才需要输入年份
  var month = parseInt(prompt("请输入一个月份"));
  switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      alert("这个月有31天");
      break;
    case 4:
    case 6:
    case 9:
    case 11:
      alert("这个月有30天");
      break;
    default:
      var y = parseInt(prompt("请输入年份"));
      if (y % 100 == 0) {
        // 为整百年
        if (y % 400 == 0) {
          alert("这个月有29天");
        } else {
          alert("这个月有28天");
        }
      } else {
        if (y % 4 == 0) {
          alert("这个月有29天");
        } else {
          alert("这个月有28天");
        }
      }
  }
  </script>
</head>
<body>
  
</body>
</html>